
#ifndef _PUBLIC_H
#define _PUBLIC_H

#include "main.h"
#include "stm32f0xx.h"

#include "Drv_Io_define.h"
#include "SI5351A.h"
#include "string.h"
#include "stdio.h"
#include <stdlib.h>
//#include "cmd_485.h"
//#include "OLED.h"







typedef int32_t  s32;
typedef int16_t s16;
typedef int8_t  s8;  
  
typedef uint32_t  u32;
typedef uint16_t u16;
typedef uint8_t  u8;  


/*

   modle0;//CS1000    

   modle1; //CS2000  

   modle2;  //CS3000   

   modle3;  //CS3500 

   modle10; //JHQA-01 

   modle11; //JHBA-02 

   modle12; //JHBD-01   

   modle13; //JHBK08     
*/


 ////临时编码 ========================================= 
#define  SYS_SN_numble             21240001 //16设备SN
#define  SYS_mod             13 //16设备SN





//-------------------初始化-----------------------------------------


void System_Initial(void);
void SystemClock_Init(void);
void Init_Gpio_Config(void);
void Init_Timer14_Config(void);
void Init_Timer3_Config(void);
void Init_ADC_Config(void); 
void EXTIX_Init(void);
void Data_Initial(void );             //数据初始化

void RCC_DeInit(void); //RCC 系统复位
void System_Hsi_Colk(void);
void SystemClock_Init(void);
void SysTick_Init(void);
void Init_WatchdogConfig(void);






//========================key===============================================




//===================== 事件 =============================================


void Get_Key_Data( void );
void input(  void );
void output(  void );//继电器
void BEEP (void);//蜂鸣器
void JSON (void);//

//======================
void LED_display (void);



//======================FLASH===================================

#define  FLASH_DATA_LENGHT  40 // FLASH 数据长度

void delay_save_cmd ( void);  //延时保存设置命令
void FLASH_handle (void);               //延迟写数据到芯片
void flash_data(void);          //flash读取存储 操作

uint8_t WriteFlashData( uint32_t u32WriteData[ FLASH_DATA_LENGHT ] );
void ReadFlashData( void );

uint16_t stm32_FLASH_ReadByte( uint32_t Address );

//void gap_time_save( void );//调用后10s保存数据
void gap_time_save(u16 gap_time);//定时存

//------------------中断----------------------------------------------

void SysTick_Handler(void);
void EXTI2_3_IRQHandler(void);
void EXTI4_15_IRQHandler(void);
void TIM14_IRQHandler(void);
void TIM3_IRQHandler(void);
void DMA1_Channel1_IRQHandler( void );

void USART1_IRQHandler(void);                	//串口1中断服务程序
void USART2_IRQHandler(void);                	//串口2中断服务程序



//===============串口=====================================


u16 calculate_crc16(u8 *data, u16 length, u16 initial_value, u16 polynomial);//计算crc16
void UART1Receive_res( void );//uart1接收复位
void UART2Receive_res( void );//uart2接收复位

void uart1_Send_string( u16 length );
void uart2_Send_string( u16 length );


void uart1_1ms( void ); //每1ms进一次，在1ms中断里面引用  
void uart2_1ms( void ); //每1ms进一次，在1ms中断里面引用  



//u8 query_val(u16 ch_name,u8 bit_add);//查询输入值

void logic( void );//主逻辑
void main_logic( void );//主逻辑
void page_logic( void );//主逻辑
void led_logic( void );//led逻辑
void warning( void );//红外感应异常报警
void update_mod( void );//更新型号

void Unit_Link( void );//设备输入输出出信号处理


void GetSTM32MCUID (void);


u8 STR_CM(char *A, char *B,u16 Lmax);//字符串比较 Lmax为最大比较长度


//void soft_433_count(void);//接受码计数函数
//void RF433_Handler(void);//接受码处理函数
//void RF433_CMD1( void );//处理函数命令1



void USART1Send_Handler( void );
void USART2Send_Handler( void );
void UART1Receive( void );
void UART2Receive( void );




void USART1_Init(void);
void USART2_Init(void);

void UART1_LINK(void);//
void UART2_LINK(void);//

//---------------------oled------------------
void OLED1(void);

void OLED_WR_Byte(u16 dat,u16 cmd);  
void OLED_Display_On(void);
void OLED_Display_Off(void);	   							   		    
void OLED_Init(void);
void OLED_Clear(void);
void OLED_DrawPoint(u8 x,u8 y,u8 t);
void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot);
void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size);
void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size);
void OLED_ShowString(u8 x,u8 y, char *p,u8 Char_Size);	 
void OLED_Set_Pos(u8 x, u8 y);
void OLED_ShowCHinese(u8 x,u8 y,u8 no);
void OLED_DrawBMP(u8 x0, u8 y0,u8 x1, u8 y1,u8 BMP[]);
void Delay_50ms(u16 Del_50ms);
void Delay_1ms(u16 Del_1ms);
void fill_picture(u8 fill_Data);
void Picture(void);
void IIC_Start(void);
void IIC_Stop(void);
void Write_IIC_Command(u8 IIC_Command);
void Write_IIC_Data(u8 IIC_Data);
void Write_IIC_Byte(u8 IIC_Byte);
void IIC_Wait_Ack(void);








//---------------------led------------------


void LEDOut(u8 data); //led发光二极管





//==============延时================================


void delay_us(u16 nus); //等待延时
void delay_ms(u16 nms); //等待延时


extern u8  fac_us_cnt;//us
extern u16 fac_ms_cnt;//ms

//==============按键=================================

void key(void); 
void IO_input(void); 



//extern  u16 flash_1_cnt;
//extern  u16 flash_0_cnt;
extern  u16 flash_cnt;  //闪烁
extern  u8 u8display_cmd;

extern  u8 display_mod;//display_mod:0,反白显示;1,正常显示

extern  u8 display_onoff;//:0,关;1,开
extern  u8 display_onoff_last;//上一次:0,关;1,开


extern  u32  u32STM32F_ID; 


extern  u32 u32RTU_A_REG[FLASH_DATA_LENGHT];
extern  u16 u16RTU_B_REG[FLASH_DATA_LENGHT]; 
extern  u32 u32RTU_C_REG[FLASH_DATA_LENGHT];//运行参数需要存储的
extern  u16 u16RTU_D_REG[FLASH_DATA_LENGHT]; 
extern  u32 u32RTU_E_REG[FLASH_DATA_LENGHT];//变量类开机重新初始化











#define	 out_ch1_val	        u32RTU_A_REG[1]//   水阀 0x0100
#define	 out_ch2_val	        u32RTU_A_REG[2]//   气阀0x0101
#define	 out_ch3_val	        u32RTU_A_REG[3]//   预留0x0102
#define	 out_ch4_val	        u32RTU_A_REG[4]//   预留0x0103
#define  remote_flush           u32RTU_A_REG[5]//   自动开关0x0104
#define  auto_onoff             u32RTU_A_REG[6]//   自动开关0x0105


#define	 KEYS_REG	        u32RTU_A_REG[10]//   按键寄存器
#define	 LEDOUT_REG	        u32RTU_A_REG[11]//   led输出寄存器
#define	 IN_REG	                u32RTU_A_REG[12]//   输入寄存器
#define	 OUT_REG	        u32RTU_A_REG[13]//   输出寄存器
                                       
#define  last_page              u32RTU_A_REG[14]//   上1页
#define  page                   u32RTU_A_REG[15]//   当前页码
                                       
#define  select                 u32RTU_A_REG[16]//   第几个选项
                                       
//#define  flush_cmd              u32RTU_A_REG[17]//   冲洗命令
#define  flush_status           u32RTU_A_REG[18]//   冲洗状态




#define  MODBUS_internet_EN     u32RTU_A_REG[20]// 使能光域网的modbus协议










#define  in_ch3_level	        u16RTU_B_REG[1]	//   NC0x0200
#define  in_ch4_level	        u16RTU_B_REG[2]	//   真空度开关0x0201
#define  in_ch2_level	        u16RTU_B_REG[3]	//   按钮开关0x0202
#define  in_ch1_level	        u16RTU_B_REG[4]	//   红外开关0x0203
#define  in_ch5_level	        u16RTU_B_REG[5]	//   NC0x0204
#define  in_ch6_level	        u16RTU_B_REG[6]//   NC0x0205


#define  in_relay1_level	        u16RTU_B_REG[7]	//   继电器1输出端子电平
#define  in_relay2_level	        u16RTU_B_REG[8]	//   继电器2输出端子电平
#define  in_relay3_level	        u16RTU_B_REG[9]//   继电器3输出端子电平










#define  ad_val                 u16RTU_D_REG[1]//   自动开关0x0400




//======================存储============================

#define  id_485                 u32RTU_C_REG[0]//         0x0300  
#define  work_time1             u32RTU_C_REG[1]// time1 液位滤波  0x0301
#define  work_time2             u32RTU_C_REG[2]// time2 开通时间 0x0301
#define  work_time3             u32RTU_C_REG[3]// time3 间隔时间0x0303
#define  work_time4             u32RTU_C_REG[4]// time4 满水报警时间0x0304
#define  run_times              u32RTU_C_REG[5]// 运行次数0x0306
#define  run_times_H            u32RTU_C_REG[6]// 运行次数高16位0x0307
#define  stop_times             u32RTU_C_REG[7]// 循环次数0x0305


#define  modle                  u32RTU_C_REG[8]// 
#define  run_time               u32RTU_C_REG[9]// 总运行时间  秒
#define  water_consumption      u32RTU_C_REG[10]// 每次耗水量
#define  waters                 u32RTU_C_REG[11]// 总耗水量
#define  ele_consumption        u32RTU_C_REG[12]// 每次耗电量
#define  eles                   u32RTU_C_REG[13]// 总耗电量
#define  waning_numb            u32RTU_C_REG[14]//报警代码
// 故障码 每一位代表不同的故障点 
//0位 OUT1开路或继电器粘连   //蜂鸣器会响
//1位 OUT2开路或继电器粘连    //蜂鸣器会响
//2位 OUT3开路或继电器粘连    //蜂鸣器会响
//3位 OUT4开路或继电器粘连    //蜂鸣器会响
//4位 OUT1短路或继电器不吸合    //蜂鸣器会响
//5位 OUT2开路或继电器不吸合    //蜂鸣器会响
//6位 OUT3开路或继电器不吸合    //蜂鸣器会响
//7位 OUT4开路或继电器不吸合   //蜂鸣器会响
//8位 红外传感器失效   //
//9位 按钮失效   //蜂鸣器会响
//10位满水报警   //蜂鸣器会响
//11位 液位传感器故障   //蜂鸣器会响


//cs3500  0 4 8 9 11    101100010001 0XB11


#define  waning_numb_EN            u32RTU_C_REG[15]//报警使能










#define  BaudRate_485_L           u32RTU_C_REG[16]// 485波特率
#define  BaudRate_485_H           u32RTU_C_REG[17]// 485波特率
#define  BaudRate_485_lock      u32RTU_C_REG[18]// 485波特率锁

#define  id_Hard                u32RTU_C_REG[19]//硬件ID
//#define  id_Hard_L                u32RTU_C_REG[20]//硬件ID
//#define  id_Hard_H                u32RTU_C_REG[21]//硬件ID

#define  SN_numble_L              u32RTU_C_REG[22]//16设备SN
#define  SN_numble_H              u32RTU_C_REG[23]//17设备SN

#define  BaudRate_internet_L      u32RTU_C_REG[24]//广域网波特率
#define  BaudRate_internet_H    u32RTU_C_REG[25]//广域网波特率

#define  BaudRate_internet_lock u32RTU_C_REG[26]//广域网波特率锁

#define  delay_off_oled_panel_time       u32RTU_C_REG[27]// 延时关屏时间 10-120s

#define  waning_display_gap_time       u32RTU_C_REG[28]// 在故障查询页面，故障显示间隔时间


#define  BEEP_off_time       u32RTU_C_REG[29]// 蜂鸣器报警周期
#define  BEEP_on_time       u32RTU_C_REG[30]// 蜂鸣器开时间

#define  Heart_Time       u32RTU_C_REG[31]// 4G心跳包间隔时间  30-600s

#define  BEEP_EN                u32RTU_C_REG[32]// BEEP报警开关

#define  autoflushcaptime                u32RTU_C_REG[33]// 自动冲洗间隔时间

#define  timestamp_L                u32RTU_C_REG[34]// 时间戳
#define  timestamp_H                u32RTU_C_REG[35]// 时间戳


#define  u32_SN_numble              u32RTU_C_REG[39]//设备32位SN



//======================非存储============================
#define  work_time1_cnt          u32RTU_E_REG[0]// 
#define  work_time2_cnt             u32RTU_E_REG[1]//  
#define  work_time3_cnt            u32RTU_E_REG[2]// 
#define  work_time4_cnt           u32RTU_E_REG[3]// 


#define  delay_off_oled_panel_cnt       u32RTU_E_REG[4]//   延时关屏计时器
#define  auto_onoff_cnt                 u32RTU_E_REG[5]//   自动冲洗间隔计数器
#define  power_flush_cnt                u32RTU_E_REG[6]//   强冲洗计数器
#define  water_full_cnt                 u32RTU_E_REG[7]//   满水冲洗计数器


#define  BaudRate_485_last              u32RTU_E_REG[8]// 上次的波特率485波特率
#define  BaudRate_internet_last         u32RTU_E_REG[9]// 上次的波特率485波特率

//#define  power_flush_time                     3000//   强冲洗时间3s
//#define  full_flush_time                     3000//   满水冲洗计数器


#define  full_flush_cnt                 u32RTU_E_REG[10]// 满水冲洗计数器
#define  Heart_Time_cnt                 u32RTU_E_REG[11]// 4G心跳时间计数器
#define  BEEP_cnt                       u32RTU_E_REG[12]// 蜂鸣器报警时间计数器


#define  modbus_exit_cnt                u32RTU_E_REG[13]// modbus退出计数器 在程序里限制在1min退出

#define  waning_numb_last               u32RTU_E_REG[14]// 上次的故障码

#define  waning_display_gap_time_cnt       u32RTU_E_REG[15]// 在故障查询页面，故障显示间隔时间计数器

#define  IR_waning_time_cnt       u32RTU_E_REG[16]// 红外传感器故障报警计时器




#define  ledpower_0  LEDOUT_REG|=0x04 
#define  ledpower_1  LEDOUT_REG&=~0x04 

#define  ledwarning_0  LEDOUT_REG|=0x08 
#define  ledwarning_1  LEDOUT_REG&=~0x08 

#define  ledzenkong_0  LEDOUT_REG|=0x10 
#define  ledzenkong_1  LEDOUT_REG&=~0x10 

#define  ledcongxi_0  LEDOUT_REG|=0x20 
#define  ledcongxi_1  LEDOUT_REG&=~0x20 

#define  ledqifa_0  LEDOUT_REG|=0x40 
#define  ledqifa_1  LEDOUT_REG&=~0x40 

#define  ledshuifa_0  LEDOUT_REG|=0x80 
#define  ledshuifa_1  LEDOUT_REG&=~0x80 



















 



//-----------------------------------
typedef struct  
{




  u8 work_onoff;//工作开关
  u8 control_mod;//控制模式
 


 
 

 
 ////--------------时机计数----------------------  
// 
//
  u16  sys_ms_cnt;  //系统时基 ms 
  u16  sys_s_cnt;  //系统时基 s   
  u32  Hour_cnt;   //系统时基 0.1小时 
  
  u16 start_display_delay;//oled开始显示延迟时间计数器
  
  
  

  
  u8  u8Scan_output_1ms_cnt;//输出时间窗  
  u8  u8Scan_input_1ms_cnt;//输入时间窗  
  u8  u8Scan_key_1ms_cnt;//按键时间窗 
  u8  u8Scan_logic_1ms_cnt;//逻辑时间窗 

  

//
////-------------------flash存储-------------------- 
//
  u32  u32ReadData[ FLASH_DATA_LENGHT ];  // 
  u32  u32WriteData[ FLASH_DATA_LENGHT ]; //   
 
  u8  ReadData_cmd;     //读数据命令
  u8  WriteData_cmd;    //写数据命令
  u8  WriteData_filish;    //写数据命令
  
  u16 WriteData_delay_cnt;//延迟写数据到芯片的计数器   默认30秒
  u16 WriteData_delay_time;//延迟写数据到芯片的时间   暂定30秒
 

  
}GLOBAL_STRUCT;


//-----------------------------------

// 定义设备参数结构体  
typedef struct {  
    uint32_t time1;      // 时间1  
    uint32_t time2;      // 时间2
    uint32_t time3;      // 时间3        
    uint32_t time4;      // 时间4
    uint32_t stopcount;  //循环冲洗次数
    uint32_t runcount;   // 运行计数  
    uint32_t X0;  //输入通道
    uint32_t X1;  //输入通道
    uint32_t X2;  //输入通道
    uint32_t X3;  //输入通道
    uint32_t X4;  //输入通道
    uint32_t X5;  //输入通道    
    uint32_t Y0;  //输出通道 
    uint32_t Y1;  //输出通道
    uint32_t Y2;  //输出通道 
    uint32_t Y3;  //输出通道 
    uint32_t ALARM;  // ALARM 字段     
    uint32_t UP;  // 新增 UP 字段  
} properties_status;  

// 定义设备信息结构体  
typedef struct 
{  
    uint32_t device_id;           // 设备ID  
    char *device_name;       // 设备名称，长度不超过14个字符
    long timestamp;          // 时间戳  
    char *type;        // 数据类型，长度不超过14个字符
    
    char name_val[15];      // 分别赋值将指针放到预定的数组位置，避免意外  
    char type_val[15];      // 分别赋值将指针放到预定的数组位置，避免意外 
    
    
    properties_status properties;           // 参数数据  
} DeviceData_status;  











// 定义设备参数结构体  
typedef struct {  
    uint32_t time1;  
    uint32_t time2;  
    uint32_t time3;
    uint32_t time4;    
    uint32_t stopcount;  
    uint32_t runcount;  
    uint32_t Y0;  
    uint32_t Y1;  
    uint32_t Y2;  
    uint32_t Y3;  
    uint32_t UP;  // 新增 UP 字段 
    uint32_t ALARM;  // ALARM 字段       
    uint32_t CX;  // 冲洗 字段      
    
    uint32_t BEEP_onoff;  // 蜂鸣器开关     
    uint32_t BEEP_ontime;  // 蜂鸣器开时间 
    uint32_t BEEP_offtime;  // 蜂鸣器关时间 
    uint16_t page;  // 页面     
    
    
    
    
} properties_cmd;  

// 定义设备信息结构体  
typedef struct 
{  
    uint32_t device_id;  
    char device_name[15];     //   
    long timestamp;  
    char type[15];       
    
    uint8_t properties_ok;           // 参数数据是否可用，如果没查找到params键参properties，否则可用置1
    properties_cmd properties;           // 参数数据  
} DeviceData_cmd; 












//-------------------------以间隔时间来判断是否接受完一组数据，间隔时间大于5ms
#define   USART1_REC_LEN  		100  	//uart1定义最大接收字节数 
#define   USART1_SEND_LEN  		100  	//uart1定义最大接收字节数 
typedef struct  
{

  u8 RxBuffer[USART1_REC_LEN];       //接收字节缓冲
  u8 Rxdate[USART1_REC_LEN];          //接收到的数组结果  
  u8 TxBuffer[USART1_SEND_LEN];       //发送字节缓冲  

  u16  uart_ms_cnt;      //串口服务程序时机
  u8  uart_BaudRate_S_cnt;      //刷新波特率计时器  
  
  
  
  
  
  u16 RxBufferSize;       //接收字节数 
  u16 Rxindex;            //接收字节计数 
  
  u8 RxCounterdata_filish;//读到完整数据//===0 485==1 JSON ===2 err==  

  
// u8  unit_ack_err_F;         //设备应答错误标志   
  
  u16 err_delay_cnt;//接收超时计数器
  u16 err_delay_time;//接收超时时间 
  u8  err_delay_F;         //接收超时标志
  u8  unit_ack_err_F;         //设备应答错误标志  

 

  u16 TxBufferSize;       //发送字节数
  u16 Txindex;            //发送字节计数

  u8 Txing_status;//是否已经发送完0发完1正在发

  u8 Tx_standard;      //要发送的数据是否为标志协议，0 485数据,1json数据
  u8 no_standarddata_LENGTH;      //要发送的数据是否为标志协议，0非标协议,1标准协议

  u16 Tx_gap_cnt;      //发送数据的间隔时间计数器
  u16 Tx_gap_time;      //发送数据的间隔时间//发送完上个数据包后间隔20ms期间也没有接受到通信数据
  u8  gap_time_F;         //间隔时间标志
  u8  Tx1_enable;      //发送数据使能
  
  
  

}UART1_STRUCT;



#define   USART2_REC_LEN  		500  	//定义最大接收字节数 
#define   USART2_SEND_LEN  		500  	//定义最大接收字节数 
typedef struct  
{


  u8 RxBuffer[USART2_REC_LEN];       //接收字节缓冲
  u8 Rxdate[USART2_REC_LEN];          //接收到的数组结果  
  u8 TxBuffer[USART2_SEND_LEN];       //发送字节缓冲  

  u16  uart_ms_cnt;      //串口服务程序时机
  u8  uart_BaudRate_S_cnt;      //刷新波特率计时器  
  
  
  
  
  
  u16 RxBufferSize;       //接收字节数 
  u16 Rxindex;            //接收字节计数 
  
  u8 RxCounterdata_filish;//读到完整数据  

  
// u8  unit_ack_err_F;         //设备应答错误标志   
  
  u16 err_delay_cnt;//接收超时计数器
  u16 err_delay_time;//接收超时时间 
  u8  err_delay_F;         //接收超时标志
  u8  unit_ack_err_F;         //设备应答错误标志  

 

  u16 TxBufferSize;       //发送字节数
  u16 Txindex;            //发送字节计数

  u8 Txing_status;//是否已经发送完0发完1正在发

  u8 Tx_standard;      //要发送的数据是否为标志协议，0 485数据,1json数据
  u8 no_standarddata_LENGTH;      //要发送的数据是否为标志协议，0非标协议,1标准协议

  u16 Tx_gap_cnt;      //发送数据的间隔时间计数器
  u16 Tx_gap_time;      //发送数据的间隔时间//发送完上个数据包后间隔20ms期间也没有接受到通信数据
  u8  gap_time_F;         //间隔时间标志
  u8  Tx1_enable;      //发送数据使能


}UART2_STRUCT;


//=============json================

#define MAX_JSON_SIZE 500  // 定义最大JSON字符串大小 
extern   u8 data_485_Y_N; //===0 err=====1 485==2 JSON 
extern   char jsonBuffer_create[MAX_JSON_SIZE];  // 用于存储生成的JSON字符串 
extern   char jsonBuffer_get[MAX_JSON_SIZE];  // 用于存储生成的JSON字符串 

extern   u32 UPLOAD_CMD;//上传命令
extern   u32 ALARM_reset_CMD;//报警复位


u8 JSON_GetObjectItem(void);
void JSON_create_heart (void);//
void JSON_create_upload (void);//


extern GLOBAL_STRUCT  gc;

extern DeviceData_status  device_status;  // 设备状态 
extern DeviceData_cmd device_cmd;  // 设备命令 


extern UART1_STRUCT  uart1;
extern UART2_STRUCT  uart2;

extern u8 key1_status;        //   按钮状态
extern u8 key2_status;        //   按钮状态
extern u8 key3_status;        //   按钮状态
extern u8 key4_status;        //   按钮状态
extern u8 key5_status;        //   按钮状态
extern u8 key6_status;        //   按钮状态

extern u8 key1_event;        //   按钮触发事件
extern u8 key2_event;        //   按钮触发事件
extern u8 key3_event;        //   按钮触发事件
extern u8 key4_event;        //   按钮触发事件
extern u8 key5_event;        //   按钮触发事件
extern u8 key6_event;        //   按钮触发事件

extern u8 key1_long_event;        //   按钮长按事件
extern u8 key2_long_event;        //   按钮长按事件
extern u8 key3_long_event;        //   按钮长按事件
extern u8 key4_long_event;        //   按钮长按事件
extern u8 key5_long_event;        //   按钮长按事件
extern u8 key6_long_event;        //   按钮长按事件

extern u32 key_OUT_L_time;//   面板按键持续输出低时间*10ms
extern u32 key_OUT_H_time;//   面板按键传感器持续输出高时间*10ms


extern u8 in_ch1_event;	       //   红外开关
extern u8 in_ch2_event;	       //   按钮开关
extern u8 in_ch3_event;	       //   真空度开关
extern u8 in_ch4_event;	       //   液位
extern u8 in_ch5_event;	       //   NC
extern u8 in_ch6_event;	       //   NC

extern u8 in_ch1_status;	//   红外开关
extern u8 in_ch2_status;	//   按钮开关
extern u8 in_ch3_status;	//   真空度开关
extern u8 in_ch4_status;	//   液位
extern u8 in_ch5_status;	//   NC
extern u8 in_ch6_status;	//   NC

extern u8 in_ch1_long_event;   //   通道事件
extern u8 in_ch2_long_event;   //   通道事件
extern u8 in_ch3_long_event;   //   通道事件
extern u8 in_ch4_long_event;   //   通道事件
extern u8 in_ch5_long_event;   //   通道事件
extern u8 in_ch6_long_event;   //   通道事件



extern u8 Relay1_Sensor_status;	//   高低电平状态
extern u8 Relay2_Sensor_status;	//   
extern u8 Relay3_Sensor_status;	//   
extern u8 Relay4_Sensor_status;	//   
extern u8 Relay5_Sensor_status;	//   
extern u8 Relay6_Sensor_status;	//   

extern u8 Relay1_Sensor_open_event;	       //   开路事件
extern u8 Relay2_Sensor_open_event;	       //   
extern u8 Relay3_Sensor_open_event;	       //   
extern u8 Relay4_Sensor_open_event;	       //   
extern u8 Relay5_Sensor_open_event;	       //   
extern u8 Relay6_Sensor_open_event;	       //   

extern u8 Relay1_Sensor_short_event;   //   短路事件
extern u8 Relay2_Sensor_short_event;   //   
extern u8 Relay3_Sensor_short_event;   //   
extern u8 Relay4_Sensor_short_event;   //   
extern u8 Relay5_Sensor_short_event;   //   
extern u8 Relay6_Sensor_short_event;   //   














extern u32 button_OUT_L_time;//   外接按钮持续输出低时间秒
extern u32 button_OUT_H_time;//   外接按钮持续输出高时间秒



extern u16 IR_time_data[20];//   红外传感器
extern u8 IR_time_index;//   红外传感器

extern u32 IR_OUT_L_time;//   红外传感器持续输出低时间秒
extern u32 IR_OUT_H_time;//   红外传感器持续输出高时间秒

extern u16 water_full_status;//   满水状态
extern u16 water_full_event;//   满水事件


extern u16 warning_time;
extern u16 warning_reset_time;


extern u32 relay1_off_time;//   继电器1接通时间秒
extern u32 relay1_on_time;//   继电器1断开时间秒

extern u32 relay2_off_time;//   继电器2接通时间秒
extern u32 relay2_on_time;//   继电器2断开时间秒

extern u32 relay3_off_time;//   继电器3接通时间秒
extern u32 relay3_on_time;//   继电器3断开时间秒



extern char *sys_modle;
extern char *modle0;
extern char *modle1;
extern char *modle2;
extern char *modle3;
extern char *modle10;
extern char *modle11;
extern char *modle12;
extern char *modle13;






#endif